#include "GlobalHead.h"

int main()
{
    // 创建一个管道  fd[1]是写  fd[0]是读
    int fd[2];
    if (pipe(fd) < 0)
    {
        perror("pipe");
        return -1;
    }

    int fd2[2];
    if (pipe(fd2) < 0)
    {
        perror("pipe");
        return -1;
    }

    pid_t pid = fork();
    if (pid < 0)
    {
        perror("fork");
        return -1;
    }

    // 子进程
    if (pid == 0)
    {
        while (1)
        {
            char msg[32] = {0};
            printf("子进程:子进程输入要传输的数据:");
            scanf("%s", msg);
            write(fd[1], msg, sizeof(msg));

            memset(msg,0,32);

            read(fd2[0], msg, 32);
            printf("子进程:读到从父进程来的数据:%s\n", msg);
        }
    }
    // 父进程
    else
    {
        while (1)
        {
            
            //fcntl(fd[0],F_SETFL,0);  // 设置阻塞态
            //fcntl(fd[0],F_SETFL,O_NONBLOCK);  // 设置非阻塞态
            char msg[32];
            // read()函数是阻塞函数，只要没读到东西就会一直停在这，不存在读完再写的情况
            read(fd[0], msg, 32);
            printf("父进程:读到从子进程来的数据:%s\n", msg);

            memset(msg,0,32);

            printf("父进程:父进程输入要传输的数据:");
            scanf("%s", msg);
            write(fd2[1], msg, 32);
        }
    }
    return 0;
}